import { Friend } from "./friend";

/**
 * 群聊成员角色枚举
 */
export enum GroupMemberRole {
  OWNER = "owner",
  ADMIN = "admin",
  MEMBER = "member",
}

/**
 * 群聊成员类型
 * 扩展自Friend类型，添加群聊特有属性
 */
export interface GroupMember extends Friend {
  /**
   * 群聊中的备注名
   */
  groupRemark?: string;

  /**
   * 成员角色：群主、管理员、普通成员
   */
  role?: GroupMemberRole;
}

/**
 * 群聊信息类型
 */
export interface GroupChat {
  /**
   * 群聊ID
   */
  id: string;

  /**
   * 群聊名称
   */
  name: string;

  /**
   * 群聊头像
   */
  avatar: string;

  /**
   * 群聊成员数量
   */
  memberCount: number;

  /**
   * 群聊最大成员数量
   */
  maxMemberCount: number;

  /**
   * 群聊公告
   */
  announcement?: string;

  /**
   * 群聊创建时间
   */
  createTime: string;

  /**
   * 群聊创建者ID
   */
  ownerId: string;

  /**
   * 群聊管理员ID列表
   */
  adminIds?: string[];
}

/**
 * 群聊成员列表模式枚举
 */
export enum GroupMembersListMode {
  INVITE = "invite",
  REMOVE = "remove",
}

/**
 * 查看所有成员模态框属性
 */
export interface ViewAllMembersModalProps {
  /**
   * 是否可见
   */
  visible: boolean;

  /**
   * 关闭回调
   */
  onClose: () => void;

  /**
   * 群聊ID
   */
  groupId?: string;

  /**
   * 群聊名称
   */
  groupName?: string;

  /**
   * 群聊头像
   */
  groupAvatar?: string;

  /**
   * 群聊成员列表
   */
  members: GroupMember[];

  /**
   * 当前用户是否是管理员
   */
  isAdmin?: boolean;

  /**
   * 当前用户是否是群主
   */
  isOwner?: boolean;
}

/**
 * 邀请成员模态框属性
 */
export interface InviteMembersModalProps {
  /**
   * 是否可见
   */
  visible: boolean;

  /**
   * 关闭回调
   */
  onClose: () => void;

  /**
   * 群聊ID
   */
  groupId?: string;

  /**
   * 群聊名称
   */
  groupName?: string;

  /**
   * 群聊头像
   */
  groupAvatar?: string;

  /**
   * 群聊成员ID列表
   */
  groupMembers?: string[];

  /**
   * 邀请回调
   */
  onInvite?: (selectedFriendIds: string[]) => void;
}

/**
 * 移除成员模态框属性
 */
export interface RemoveMembersModalProps {
  /**
   * 是否可见
   */
  visible: boolean;

  /**
   * 关闭回调
   */
  onClose: () => void;

  /**
   * 群聊ID
   */
  groupId?: string;

  /**
   * 群聊名称
   */
  groupName?: string;

  /**
   * 群聊头像
   */
  groupAvatar?: string;

  /**
   * 群聊成员ID列表
   */
  groupMembers?: string[];

  /**
   * 当前用户是否是管理员
   */
  isAdmin?: boolean;

  /**
   * 当前用户是否是群主
   */
  isOwner?: boolean;

  /**
   * 移除回调
   */
  onRemove?: (selectedMemberIds: string[]) => void;
}

/**
 * 群聊成员列表组件属性
 */
export interface GroupMembersListProps {
  /**
   * 列表模式
   */
  mode: GroupMembersListMode;

  /**
   * 好友/成员列表
   */
  friends: (Friend | GroupMember)[];

  /**
   * 是否加载中
   */
  loading: boolean;

  /**
   * 已选择的ID列表
   */
  selectedIds: string[];

  /**
   * 选择项回调
   */
  onSelectItem: (id: string) => void;

  /**
   * 群聊成员ID列表
   */
  groupMembers?: string[];

  /**
   * 当前用户是否是管理员
   */
  isAdmin?: boolean;

  /**
   * 当前用户是否是群主
   */
  isOwner?: boolean;
}
